[SQL 8] Mysql  UNION
πŸ‘¨β€πŸ‘§β€πŸ‘¦

[SQL 8] Mysql UNION

Lecture
CS
νƒœκ·Έ
cs
mysql
sql
public
μ™„μ„±
Y
생성일
Mar 17, 2024 06:28 PM
LectureName
MySQL

UNION


λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ UNION은 두 개 μ΄μƒμ˜ SELECT 문의 κ²°κ³Ό 집합을 ν•˜λ‚˜λ‘œ κ²°ν•©ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. UNION은 μ€‘λ³΅λœ 행을 μ œκ±°ν•˜κ³  κ²°κ³Ό μ§‘ν•©μ—μ„œ μœ μΌν•œ ν–‰λ§Œ λ°˜ν™˜ν•˜λ©°, UNION ALL은 μ€‘λ³΅λœ 행도 λͺ¨λ‘ ν¬ν•¨ν•©λ‹ˆλ‹€.
Β 

1. 문법

SELECT column1 FROM table1 WHERE condition1 UNION [ALL] SELECT column2 FROM table2 WHERE condition2;
  • column1, column2: λ°˜ν™˜ν•˜λ €λŠ” μ—΄μ˜ μ΄λ¦„μž…λ‹ˆλ‹€.
  • table1: 데이터λ₯Ό κ°€μ Έμ˜¬ ν…Œμ΄λΈ”μ˜ μ΄λ¦„μž…λ‹ˆλ‹€.
  • WHERE μ ˆμ€ 선택 μ‚¬ν•­μž…λ‹ˆλ‹€. 쑰건식이 λ‚˜μ—΄λœλ‹€λ©΄, UNION의 결과에 ν¬ν•¨λ˜λŠ” 행을 ν•„ν„°λ§ν•©λ‹ˆλ‹€.
  • UNION ν‚€μ›Œλ“œλŠ” 두 개 μ΄μƒμ˜ SELECT 문의 κ²°κ³Όλ₯Ό ν•©μΉ˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • ALL ν‚€μ›Œλ“œλŠ” μ€‘λ³΅λœ 행도 λͺ¨λ‘ λ°˜ν™˜ν•©λ‹ˆλ‹€. μƒλž΅ν•˜λ©΄ μ€‘λ³΅λœ 행은 μ œκ±°λ©λ‹ˆλ‹€.
Β 
Β 

예제 1

SELECT name, age FROM students UNION SELECT name, age FROM teachers;
μœ„ μ˜ˆμ œλŠ” students와 teachers ν…Œμ΄λΈ”μ—μ„œ nameκ³Ό age 열을 μ„ νƒν•˜κ³ , 두 κ²°κ³Ό 집합을 UNION으둜 κ²°ν•©ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해, 학생과 κ΅μ‚¬μ˜ 이름과 λ‚˜μ΄λ₯Ό λͺ¨λ‘ λ°˜ν™˜ν•©λ‹ˆλ‹€. μ€‘λ³΅λœ 행은 μ œκ±°λ©λ‹ˆλ‹€.
Β 
+--------+-----+ | name | age | +--------+-----+ | John | 20 | | Jane | 22 | | Peter | 25 | | Rachel | 30 | | Tom | 35 | | Mary | 40 | +--------+-----+
Β 

예제 2

SELECT name, age FROM students UNION ALL SELECT name, age FROM teachers;
μœ„ μ˜ˆμ œλŠ” students와 teachers ν…Œμ΄λΈ”μ—μ„œ nameκ³Ό age 열을 μ„ νƒν•˜κ³ , 두 κ²°κ³Ό 집합을 UNION ALL둜 κ²°ν•©ν•©λ‹ˆλ‹€. 이λ₯Ό 톡해, 학생과 κ΅μ‚¬μ˜ 이름과 λ‚˜μ΄λ₯Ό λͺ¨λ‘ λ°˜ν™˜ν•©λ‹ˆλ‹€. μ€‘λ³΅λœ 행도 λͺ¨λ‘ ν¬ν•¨λ©λ‹ˆλ‹€.
Β 
+--------+-----+ | name | age | +--------+-----+ | John | 20 | | Jane | 22 | | Peter | 25 | | Rachel | 30 | | Tom | 35 | | Mary | 40 | | Jane | 30 | +--------+-----+
Β 
Β 
Β 
Β 

2. μ£Όμ˜μ‚¬ν•­

  • UNIONκ³Ό UNION ALL은 각각 2개 μ΄μƒμ˜ SELECT 문의 κ²°κ³Ό 집합을 ν•˜λ‚˜λ‘œ κ²°ν•©ν•©λ‹ˆλ‹€. μ΄λ•Œ, 각 SELECT 문의 μ—΄ μˆ˜μ™€ 데이터 μœ ν˜•μ΄ 동일해야 ν•©λ‹ˆλ‹€.
  • UNIONκ³Ό UNION ALL은 κ²°κ³Ό μ§‘ν•©μ˜ μ—΄ 이름을 첫 번째 SELECT 문의 μ—΄ μ΄λ¦„μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • UNION은 κ²°κ³Ό μ§‘ν•©μ—μ„œ μ€‘λ³΅λœ 행을 μ œκ±°ν•©λ‹ˆλ‹€.
  • UNION ALL은 μ€‘λ³΅λœ 행도 λͺ¨λ‘ ν¬ν•¨ν•©λ‹ˆλ‹€.
  • UNIONκ³Ό UNION ALL은 μ„±λŠ₯이 쒋지 μ•Šμ„ 수 μžˆμœΌλ―€λ‘œ, ν•„μš”ν•œ 경우 λŒ€μ²΄ 방법을 κ³ λ €ν•΄μ•Ό ν•©λ‹ˆλ‹€.
Β 
Β 
μœ μ‚¬ν•œ ν•¨μˆ˜
MySQLμ—μ„œλŠ” MINUSλ‚˜ INTERSECT와 같은 집합 μ—°μ‚°μžλ₯Ό μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λŒ€μ‹ , λ‹€λ₯Έ 방법을 μ‚¬μš©ν•˜μ—¬ λ™μΌν•œ κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

MINUS λŒ€μ•ˆ

MINUSλŠ” 첫 번째 SELECT λ¬Έμ—λŠ” ν¬ν•¨λ˜μ§€λ§Œ 두 번째 SELECT λ¬Έμ—λŠ” ν¬ν•¨λ˜μ§€ μ•ŠλŠ” 행을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
SELECT column1 FROM table1 WHERE condition1 EXCEPT SELECT column1 FROM table2 WHERE condition2;
μœ„ μ˜ˆμ œμ—μ„œ EXCEPT λŒ€μ‹  NOT IN을 μ‚¬μš©ν•˜μ—¬ λ™μΌν•œ κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.
SELECT column1 FROM table1 WHERE column1 NOT IN (SELECT column1 FROM table2 WHERE condition2);
Β 

INTERSECT λŒ€μ•ˆ

INTERSECTλŠ” 두 개의 SELECT 문에 λͺ¨λ‘ ν¬ν•¨λ˜λŠ” 행을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
SELECT column1 FROM table1 WHERE condition1 INTERSECT SELECT column1 FROM table2 WHERE condition2;
μœ„ μ˜ˆμ œμ—μ„œ INTERSECT λŒ€μ‹  INNER JOIN을 μ‚¬μš©ν•˜μ—¬ λ™μΌν•œ κ²°κ³Όλ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.
SELECT column1 FROM table1 INNER JOIN table2 ON table1.column1 = table2.column1 WHERE condition1 AND condition2;
이 방법은 일반적으둜 INNER JOIN이 INTERSECT보닀 더 효율적이기 λ•Œλ¬Έμ— 더 μ„ ν˜Έλ©λ‹ˆλ‹€.